
#ifndef LZ78_HashTable_h
#define LZ78_HashTable_h

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdint.h>

#define HASHSIZE    40000

typedef struct HTNode {
    uint8_t symbol;
    uint16_t father;
    uint16_t son;
    struct HTNode *next;
} Node;
                       
void HT_Add(Node *hashtable, uint8_t symbol, uint16_t father, uint16_t index); 
Node* HT_Init(void);
uint16_t HT_Lookup(Node *hashtable, uint8_t symbol, uint16_t father);
void HT_ResolveCollision(Node *hashtable, int loc, uint8_t symbol, uint16_t father, uint16_t dictionaryindex);
void HT_Print(Node *hashtable);                    
void HT_Delete(Node *Dictionary);           
uint16_t HT_Hash(uint8_t symbol, uint16_t father); 

#endif

